package com.linkgie.galaxyframework.metadata;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 整数值类型的字段的状态判定标注
 * <p>
 * 
 * 用于将 {@link StateKey} 标注的字段值进行判断，生成状态标识；
 * <p>
 * 
 * 在一个字段上声明多个 {@link LongRangeState} 判定条件时，相同 {@link #state()}
 * 的多个判定条件在默认情况下，会按照“逻辑或”运算组合一起；
 * 
 * @author huanghaiquan
 *
 */
@StatePredicate
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(LongRangeStates.class)
@Documented
public @interface LongRangeState {

	/**
	 * 状态名称；
	 * 
	 * @return
	 */
	String state();

	/**
	 * 最大值；
	 * 
	 * @return
	 */
	long maxValue() default Long.MAX_VALUE;

	/**
	 * 取值范围是否包含 {@link #maxValue()} 最大值；
	 * <p>
	 * 
	 * 默认为 true ；
	 * 
	 * @return
	 */
	boolean maxIncluded() default true;

	/**
	 * 最小值；
	 * <p>
	 * 
	 * 默认为 0 ；
	 * 
	 * @return
	 */
	long minValue() default 0;

	/**
	 * 取值范围是否包含 {@link #minValue()} 最小值；
	 * <p>
	 * 
	 * 默认为 true ；
	 * 
	 * @return
	 */
	boolean minIncluded() default true;
}
